package com.app.biz.utils;

import java.util.Arrays;

/**
 * <p>
 *     计算数组中指定偏移数据工具
 * </p>
 * @author SangGuangCan
 * @since 2024-01-03
 */
public class MaxMinUtil {


    /**
     * <p>
     *     通过传入的double数组<br/>
     *     计算出以最大值偏移指定值的数字<br/>
     *     计算出以最小值偏移指定值的数字
     * </p>
     * @param doubleList 数据
     * @return 返回一个数组，数组内的数据第一个为最大值，第二个为最小值
     */
    public static int[] calculateYAxisRange(double[] doubleList) {
        if (doubleList == null || doubleList.length == 0) {
            int[] p = new int[]{0,0};
            return p;
        }

        // 计算列表的最大值和最小值，使用 Math.round 进行四舍五入
        int maxValue = (int) Math.round(getMaxValue(doubleList));
        int minValue = (int) Math.round(getMinValue(doubleList));

        // 设置偏移百分比
        double offsetPercentage = 0.08;

        // 计算偏移后的最大值和最小值
        int adjustedMaxValue = (int) Math.round(maxValue + offsetPercentage * maxValue);
        int adjustedMinValue = (int) Math.round(minValue - offsetPercentage * minValue);

        return new int[]{adjustedMaxValue, adjustedMinValue};
    }

    private static double getMaxValue(double[] data) {
        return Arrays.stream(data).max().orElse(Double.NaN);
    }

    private static double getMinValue(double[] data) {
        return Arrays.stream(data).min().orElse(Double.NaN);
    }

}
